package com.ruoyi.web.controller.app;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * B端 合作商管理接口 (经销商专属)
 */
@RestController
@RequestMapping("/b-api/partner")
public class BapiPartnerController extends BaseController {

    @Autowired
    private ISysUserService userService;

    /**
     * 获取我发展的合作商列表
     * (此接口仅限经销商访问)
     */
    @PreAuthorize("@ss.hasRole('distributor')") // <-- 关键！接口级别的权限校验
    @GetMapping("/list")
    public TableDataInfo list(SysUser user) {
        // 强制设置查询条件：只查自己名下的合作商
        user.setDistributorId(SecurityUtils.getUserId());

        startPage();
        // 我们需要一个新的Service方法来按条件查询
        List<SysUser> list = userService.selectPartnerList(user);
        return getDataTable(list);
    }

    /**
     * 获取单个合作商详情
     * (此接口仅限经销商访问)
     */
    @PreAuthorize("@ss.hasRole('distributor')")
    @GetMapping("/{partnerId}")
    public AjaxResult getInfo(@PathVariable Long partnerId) {
        // 安全校验：确保查询的合作商是当前经销商发展的
        SysUser partner = userService.selectUserById(partnerId);
        if (partner == null || !SecurityUtils.getUserId().equals(partner.getDistributorId())) {
            return AjaxResult.error("合作商不存在或无权访问");
        }

        // 【核心修正】直接使用 AjaxResult.success() 返回单个对象
        // 在返回前进行脱敏，避免泄露密码等信息
        partner.setPassword(null);
        return AjaxResult.success(partner);
    }
}